import type { NextApiRequest, NextApiResponse } from 'next';
import { BeError, BeSuccess, ResponseDataType } from '@/utils/response';
import log from '@/utils/log';
import storyFieldChange from '@/services/tapd/storyFieldChange';
import getConfig from 'next/config';
/**
 * 1: 当需求状态调整位【排期中（PRD评审通过）】
 * 2: 当需求状态由【排期中（PRD评审通过）】调整为【排期完成（待进入开发）】/【开发中】
 * 3: 当需求状态调整为【项目目标review】
 * 4: 当需求状态调整为【需求评审未通过】
 * 5: 在【排期中（PRD评审通过）】状态停留超过两天，通知owner输出排期并调整状态
 * 6: 在【排期中（PRD评审通过）】状态停留超过4天，通知owner及pmo输出排期并调整状态
 * 20: 需求字段【是否按时交付】设置为“否”
 */
const OperateList = ['1', '2', '3', '4', '5', '6', '20'];
/**
 * 需求字段变更接口
 * @param req
 * @param res
 * @returns
 */
export default async function handler(req: NextApiRequest, res: NextApiResponse<ResponseDataType>) {
  const { type } = req.query as { type: string };
  if (!OperateList.includes(type)) {
    log.error('类型错误', type);
    res.status(500).json(BeError(`类型错误：${type}`));
    return;
  }
  const { event } = req.body;
  if (!event) {
    log.error('输入参数为空');
    res.status(500).json(BeError('输入参数为空'));
    return;
  }
  try {
    await storyFieldChange(type, event);
    res.status(200).json(BeSuccess());
  } catch (error: any) {
    log.error('tapd需求：', JSON.stringify(event));
    const { publicRuntimeConfig }: { publicRuntimeConfig: EnvParamsType } = getConfig();
    log.error('当前环境配置：', JSON.stringify(publicRuntimeConfig));
    log.error(error);
    // 请求状态如果不是200，tapd会提示接口异常，并且给自动化创建人发邮件通知。
    // 目前接口查询为空，会抛出异常，所以把请求状态为200，内容显示错误消息。
    res.status(200).json(BeError(error.message));
  }
}
